home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / asm / Asm_Course2.lha / Teil09.TXT < prev    next >
Text File  |  1993-09-01  |  12KB  |  318 lines

  1.           A S S E M B L E R - K U R S       (c)  Jeff Kandle 1990
  2.  
  3.                                  9.Teil...
  4.  
  5. So, arbeiten wir noch ein bisschen mit dem listing von Eben.
  6. Fuegt doch mal vor dem Ende der Copperliste folgende zeilen ein..
  7.  
  8.  
  9. dc.w $0182,$0000
  10. dc.w $000f,-2
  11. dc.w $0182,$0222
  12. dc.w $100f,-2
  13. dc.w $0182,$0444
  14. dc.w $200f,-2
  15. dc.w $0182,$0666
  16. dc.w $200f,-2
  17. dc.w $0182,$0888
  18. dc.w $200f,-2
  19. dc.w $0182,$0aaa
  20. dc.w $500f,-2
  21. dc.w $0182,$0ccc
  22. dc.w $600f,-2
  23. dc.w $0182,$0eee
  24. dc.w $700f,-2
  25. dc.w $0182,$0ccc
  26. dc.w $800f,-2
  27. dc.w $0182,$0aaa
  28. dc.w $900f,-2
  29. dc.w $0182,$0888
  30. dc.w $a00f,-2
  31. dc.w $0182,$0666
  32. dc.w $b00f,-2
  33. dc.w $0182,$0444
  34. dc.w $c00f,-2
  35. dc.w $0182,$0222
  36. dc.w $d00f,-2
  37. dc.w $0182,$0000
  38.  
  39.  
  40. Nett, nicht wahr...schoener Effekt.
  41.  
  42. Natuerlich koennte man auf diese art und weise auf ein logo Titschen oder
  43. schwingen lassen. Dazu muessten wir wie am anfang mit dem balken der
  44. Springt, die Positionen nicht mehr durch ein Popeliges `Add` erschaffen,
  45. sondern die positionen aus einer Tabelle lesen. Aber das machen wir
  46. zusammen mit dem dem Naechsten Effekte, der ein wahrer Super effekt ist,
  47. wenn man sich muehe gibt...Aber ich denke es wird mal zeit etwas zu machen
  48. was schon mal etwas Profisioneller aussieht.
  49. Dazu muessen wir allerdings Einen Schritt weiter gehen, naemlich in...
  50.  
  51. 12.Animation durch zyklische Copperlistenneuerstellung
  52.  
  53. Hoert sich etwas Komisch an, ist aber schnell erklaert.
  54. Die veraenderungen die wird bis jetzt an den Copperlisten durchgefuehrt
  55. haben bezogen sich immer nur auf ein oder zwei Elemente.
  56. Jetzt aber werden die veraenderungen so Zahlreich das es einfacher und
  57. schneller ist wenn wir jedesmal eine neue copperliste berechnen lassen, und
  58. sie ueber die alte Kopieren.
  59.  
  60. Anwendung wuerde es finden, wenn wir wie im Vorletzten Listing eine
  61. Copperliste erstellen, die eine Farbspielerei durch veraendern einer
  62. Tabelle immer wieder neue Bilder Bringt, evtl. koennte auch bei jedem
  63. Durchlauf eine Neue Tabelle initialisiert werden.
  64.  
  65. Tja das ist alles moeglich. Wir nehmen also die Technik die wir schon
  66. kennen. Das erste element lesen und die Tabelle rotieren lassen.
  67.  
  68. Ich ueberlege mir gerade was wir den zusammenschustern...Entweder Stripes
  69. (tubes) oder einen Waessrigen Wassereffekt, der waere natuerlich schoener.
  70.  
  71. Also, machen wir einen Kombinierten Logo-Titsch und Wasser effekt.
  72.  
  73. Das mit dem Titschen is ja wohl Null Probleme wie Alf jetzt sagen wuerde.
  74. Denn das erstzen der Add funktion durch das auslesen einer Tabelle ist ja
  75. schon etwas laenger bekannt. Jetzt muss ich nur noch die technik des
  76. Wassereffektes erklaeren...Naja dazu gehen wir zwar nicht an den Fuehlinger
  77. See, sonder in den Ascii see. Stellt euch bitte vor am ufer steht eine 4,
  78. auf deren schulter eine drei, darauf eine 2 und ganz oben ist eine 1.
  79. Desweiteren Stellt euch vor ihr kommt aus dem Wasser, es sind wellen da,
  80. und ihr seht nach vorne. Dann seht ihr etwas verzerrt die Vier auch im
  81. wasser wieder, allerdings auf dem Kopf...Ich versuche das mal
  82. aufzuzeichnen. Bitte entschuldigt, den meine AscII zeichen faehigkeiten
  83. sind doch sehr begrenzt.
  84. Ich beschreibe die Situation von der seite, wobei die Zahlen auf den Wasser
  85. die Stellen sind wo ihr die Spiegeln bilder der Zahlen am Ufer seht.
  86.  
  87.  
  88. Du                                           1
  89.                                              2
  90.                                              3
  91.                                              4
  92.          111                           ________________
  93.  ***     ***2   4***     ***     ***  /
  94. *   *   *   *333*   *   *   *   *   */ Strand
  95.      ***     ***     ***     ***    /
  96.  
  97. Wenn ihr euch vorstellt von Punkt `Du` zu gucken seht ihr die 1 ein paar
  98. mal, also verzerrt laenger, die 2 garnicht, von der drei, zwei abschnitte,
  99. allerdings wieder ins groessere verzerrt, und die 4 ganz. Das ganze
  100. verzieht sich natuerlich sobald sich das wasser bewegung. Da wasser die
  101. bewandnis hat niemals in wellen zu stehen, ist es klar das es sich standig
  102. aendert.
  103.  
  104. So auch wenn es schwerfaellt, erinnert euch mal an das was ich geschrieben
  105. habe zu den Einfachen effekten mit den Modulo werte, vonwegen Zeile
  106. doppelt, oder Zeile garnicht oder so.
  107. Mit dieser Technik koennten wir das machen, also frisch ans Werk.
  108. Das wir jetzt fuer laenger zeit erstmal das letzte komplette listing. Da
  109. wir ein laengere zeit nur noch mit Austauschen der Erstellungsroutinen
  110. auskommen.
  111. Achja fuer die Leute die sich die Register markieren.
  112. Die Modulo register fuer Grade und ungrade Planes sind
  113. $DFF108 ungrade  ($0108 in dem Copperlistenerstellungsprogramm)
  114. $DFF10A grade  ($010a in dem Copperlistenerstellungsprogramm)
  115.  
  116. Falls ihr mir den Worten grade und ungrade noch nicht anfangen koennt, oder
  117. warum es zwei getrennte gibt ist einfach.
  118. Es ist zwar laestige bei einem bild ueber einer Plane (also ueber 2 Farben)
  119. immer alle beide Modulo Werte zu setzen. Allerdings gibt es den
  120. DualPlayfield-Modus, in dem Zwei voellig voneinander unabhaegige Playfields
  121. gezeigt werden. Diese Koennen allerdings nicht mehr als 8 farben (3 planes)
  122. darstellen, da der Amiga insgesamt nur 6 Planes verwaltet. Die beiden
  123. Playfields teilen sich dann die graden und ungraden auf...
  124.  
  125. Playfield 1         -         Playfield 2
  126.     1                             2
  127.     3                             4
  128.     5                             6
  129.  
  130. Und dann ist es natuerlich schon besser wenn man getrennte Modulo werte
  131. hat. Denn das eine Koennte ja ein Titschendes Logo sein, und das andere
  132. ein Playfield mit uebergroesse, oder ?
  133.  
  134.  
  135. Hier erstmal das Programm, ein paar erklaerungen hinterher.
  136.  
  137.  
  138. start:
  139. execbase=       4
  140. openlibrary=    -408
  141. vhposr=         $dff006
  142. intena=         $dff09a
  143. dmacon=         $dff096
  144. cop1lc=         $dff080
  145. ciaapra=        $bfe001
  146.  
  147.         move.w  #$0020,dmacon
  148.         move.w  #$4000,intena
  149.         move.w  #7,d0
  150.         lea     $40000,a0
  151.         lea     $dff180,a1
  152. coloop:
  153.         move.w  (a0)+,(a1)+
  154.         dbf     d0,coloop
  155. wait:   cmpi.b  #$80,vhposr
  156.         bne.s   wait
  157.         bsr.s   makecl
  158.         bsr.L   tablescroll
  159.  
  160.         btst    #6,ciaapra
  161.         bne     wait
  162.  
  163.         move.l  execbase,a6
  164.         lea     gfxname(pc),a1
  165.         jsr     openlibrary(a6)
  166.         move.l  d0,a6
  167.         move.w  #$83e0,dmacon
  168.         move.w  #$c000,intena
  169.         move.l  38(a6),cop1lc
  170.         rts
  171.  
  172. makecl:
  173.         lea     $03f000,a0
  174.         move.l  a0,cop1lc
  175.         move.l  #$01003200,(a0)+
  176.         move.l  #$00e00004,(a0)+
  177.         move.l  #$00e20010,(a0)+
  178.         move.l  #$00e40004,(a0)+
  179.         move.l  #$00e62810,(a0)+
  180.         move.l  #$00e80004,(a0)+
  181.         move.l  #$00ea5010,(a0)+
  182.         move.l  #$01003200,(a0)+
  183.         move.l  #$008e3081,(a0)+        ;diwstrt
  184.         move.l  #$009030c1,(a0)+        ;diwstop
  185.         move.l  #$00920038,(a0)+        ;ddfstrt
  186.         move.l  #$009400d0,(a0)+        ;ddfstop
  187.  
  188. ;----------------------------------------------------------------
  189. ; Wasser Effekt
  190. ;----------------------------------------------------------------
  191.         bsr.s   makewasser
  192.  
  193.         move.l  #$b10ffffe,(a0)+
  194.         move.l  #$01000200,(a0)+
  195.         move.l  #$01081780,(a0)+
  196.         move.l  #$010a1780,(a0)+
  197.         move.l  #$01020000,(a0)+
  198.         move.l  #$b20ffffe,(a0)+
  199.         move.l  #$01080000,(a0)+
  200.         move.l  #$010a0000,(a0)+
  201.         move.l  #$-2,(a0)+
  202.         rts
  203.  
  204. gfxname: dc.b "graphics.library",0
  205. >Extern "wasserpic.raw",$40000
  206. even
  207. Makewasser:
  208.         move.w  #$0108,d0               ;Modulo fuer ungerade planes
  209.         move.w  #$6c0f,d2               ;Waitadressen
  210.         move.w  #$fffe,d3               ;Waitbefehl
  211.         move.w  #$0043,d4               ;Counter
  212.         move.l  #wassertable,a1         ;Wasserdatentabelle
  213.  
  214. wasserloop:
  215.         move.w  d2,(a0)+                        ;Warte auf ..
  216.         move.w  d3,(a0)+                        ;Wartebefehl
  217.         move.w  d0,(a0)+
  218.         add.w   #2,d0
  219.         move.w  (a1),(a0)+              ;Modulo wert aus tabelle
  220.         move.w  d0,(a0)+                ;Modulo gerade
  221.         sub.w   #2,d0
  222.         move.w  (a1)+,(a0)+             ;Modulo wert aus tabelle
  223.         add.w   #$100,d2
  224.         dbf     d4,wasserloop
  225.         rts
  226. Tablescroll:
  227.         move.w  #$63,d0
  228.         move.l  #wassertable,a0
  229.         move.l  a0,a1
  230.         add.l   #2,a1
  231.         move.w  (a0),a2
  232. scrollloop:
  233.         move.w  (a1)+,(a0)+
  234.         dbf     d0,scrollloop
  235.         move.w  a2,(a0)
  236.         rts
  237. wassertable:
  238. dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
  239. dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
  240. dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
  241. dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
  242. dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
  243. dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
  244. dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
  245. dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
  246. dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
  247. dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
  248. dc.w -80,-80,-120,-80,-120,-120,-120,-120,-80,-120,-80,-80
  249. dc.w -80,-80,-40,-80,-40,-40,-40,-40,-80,-40,-80,-80
  250.  
  251.  
  252. Den namen muesst ihr selber einsetzen. Ich habe den Extern befehl frueher
  253. immer irgendwo im Listing positioniert, also viel spass beim suchen !
  254.  
  255. So fleissig wie ihr denkt bin ich allerdings nicht, ich habe das nicht
  256. eben jetzt gemacht, sondern....
  257.  
  258. Tratarata, das ist mein erster versuch mit dem Wasser-effekt, es ist
  259. ungefaehr 4 monate alt...Und wie ihr seht habe ich meine Programmierstil
  260. seitdem nicht grossartig veraendert. Aber das heisst nichts, so habe ich
  261. auch schon auf dem 64`er gewurschtelt.
  262. Wobei ich hiermit alle Kursteilnehmer gruessen moechte die vom guten alten
  263. 64`er umgestiegen sind, um die klasse hoeher zu fahren..
  264.  
  265. Ich habe nichts grossartiges daran geaendert, deshalb laeuft es mit 8
  266. Farben, waere guenstig wenn ihr noch ein Bild malt, welches nur aus drei
  267. Planes besteht, oder besser versucht doch mal es umzuschreiben so das es
  268. auf 32 farben laeuft. Eins ist allerdings von Noeten, ihr muesst in der
  269. Erstellungs routine die da Heisst `Makewasser`, das erste wait wort so
  270. einstellen so das es auf das ende Eures Logos zeigt. Es waere ganz gut wenn
  271. euer Logo 70 Zeilen nicht ueberschreitet. Ansonsten koennt ihr machen was
  272. ihr wollt.
  273.  
  274. So jetzt mal kurz zu der Funktion des Prograemmchens...
  275. Es triftt alle noetigen vorbereitungen, ausserhalb der Endlosschleife.
  276. Naja, was heisst `Alle`...sie kopiert nur die Farben nach $dff180 und so
  277. weiter. Copperliste wird noch keine Erstellt.
  278. Das passiert in der Endlosschleife, dort erstellen wir eine Copperliste,
  279. die jeder zeile in einem bestimmten bereich einen Modulo wert gibt.
  280. Diese Modulowerte, entsprechen dem was ich von dem Blick auf das wasser
  281. gesagt habe. Manches sieht man nicht, manches ja...manches sogar doppelt
  282. und dreifach..
  283. Nachdem die Copperliste erstellt ist, wird die Tabelle der Modulo werte
  284. Rotiert. Dann wird wieder einmal die Maus abgefragt...und schliesslich
  285. falls nicht gedrueckt...springt der Pozessor wieder in die Endlos schleife.
  286.  
  287. Allerdings muss dieser Effekt, wenn er in ein Intro/Demo eingebaut wird
  288. etwas veraendert werden, aber dazu (Viel) spaeter.
  289.  
  290. Versucht mal eine Andere Tabelle zu erstellen, ihr muesst allerdings dann
  291. auch die Routine achten die die Tabelle Rotieren laesst, ihr muesst sie
  292. dann auf eine neue Laenge einstellen.
  293.  
  294. Bei diesem Listing ist halt sehr deutlich zu sehen wie das mit dem
  295. Zyklischen veraendern der Copperliste geht. Sobald die Zeile #$80 erreicht
  296. ist, wird die neue Liste errechnet, und gleichzeitg aufgebaut. Nachdem die
  297. steht wir noch die Tabelle rotiert, und dann kommt eine Maus abfrage. Und
  298. dann wieder von Vorne.
  299. Falls ihr, was ich nicht hoffen will, das ganze noch nicht so ganz
  300. verstanden habt, es ging auch etwas schnell, dann ist das nicht ganz so
  301. schlimm, das kommt...da wir jetzt schon zu den Fortgeschrittenen zaehlen,
  302. koennen wir uns kleine schnitzer erlauben. Da ich nicht annehme das ihr
  303. euch alles nur einmal durchlest schaetze ich mal das es irgendwann auch der
  304. letzte kapiert.
  305.  
  306. Ihr koenntet ja mal versuchen, diesen Wassereffekte so mit der
  307. Horizontalen laufschrift (ich nenne sie Kino Schrift) zu verbinden das es
  308. aussieht als wenn die Schrift aus dem Wasser Kaem, gute idee ne ?
  309.  
  310. So, nachdem wir das mit diser zyklischen veraenderung verstanden habe
  311. machen wir uns weiter, wieder weg davon und hin zur einfachen veraenderung
  312. von einzelnen Elementen der laufenden Copperliste.
  313. Im naechsten Teil wagen wir uns an ein Schwingendes Logo...
  314.  
  315. See you....
  316.  
  317.                 Jeff Kandle
  318.